﻿/**
 * 主窗口类的构造方法。
 */
function MainWindow() {
    const mButtonMusic = document.getElementById("IDC_BUTTON_MUSIC")            // "播放音乐"按钮
    const mButtonPause = document.getElementById("IDC_BUTTON_PAUSE")            // "暂停"按钮
    var mGame = null                                                            // 游戏
    const mLabelDifficulty = document.getElementById("IDC_LABEL_DIFFICULTY")    // "难度"标签
    const mLabelScore = document.getElementById("IDC_LABEL_SCORE")              // "得分"标签

    document.title = IDS_APP_NAME[LANG]                                         // 设置文档标题
    document.onkeydown = onKeyPressed                                           // 添加键盘事件的响应方法
    window.onblur = onLostFocus                                                 // 添加窗口失去焦点事件的响应方法
    document.addEventListener(Const.UM_DIFFICULTY_UP, onDifficultyUp)           // 添加难度增加事件的响应方法
    document.addEventListener(Const.UM_SCORE, onScore)                          // 添加得分事件的响应方法
    document.addEventListener(Const.UM_GAME_OVER, onGameOver)                   // 添加游戏结束事件的响应方法

    // 设置"帮助"按钮
    const buttonHelp = document.getElementById("IDC_BUTTON_HELP")
    buttonHelp.onclick = onButtonHelpClicked
    setTooltip(buttonHelp, IDS_HELP[LANG])

    // 设置"音乐"按钮
    mButtonMusic.onclick = onButtonMusicClicked
    setTooltip(mButtonMusic, IDS_MUSIC[LANG])

    // 设置"暂停"按钮
    mButtonPause.disabled = true
    mButtonPause.onclick = onButtonPauseClicked
    setTooltip(mButtonPause, IDS_PAUSE[LANG])

    // 设置"开始"按钮
    const buttonStart = document.getElementById("IDC_BUTTON_START")
    buttonStart.onclick = onButtonStartClicked
    setTooltip(buttonStart, IDS_START[LANG])

    // 设置"难度"标签
    mLabelDifficulty.innerHTML = IDS_DIFFICULTY[LANG]

    // 设置"得分"标签
    mLabelScore.innerHTML = IDS_SCORE[LANG]

    // 创建游戏区域
    const gameBoard = new GameBoard("IDC_GAME_BOARD")

    // 创建游戏
    mGame = new Game(gameBoard.getDrawer(), gameBoard)

    /**
     * "帮助"按钮的单击响应方法。
     */
    function onButtonHelpClicked() {
        window.alert(IDS_HELP_TEXT[LANG])
    }

    /**
     * "音乐"按钮的单击响应方法。
     */
    function onButtonMusicClicked() {
        const playing = mGame.playMusic()
        mButtonMusic.style.backgroundImage = playing ? "url(res/Music_Pressed.png)": "url(res/Music.png)"
    }

    /**
     * "暂停"按钮的单击响应方法。
     */
    function onButtonPauseClicked() {
        mGame.pause()
        mButtonPause.style.backgroundImage = mGame.getStatus() == GameStatus.PAUSED ? "url(res/Pause_Pressed.png)": "url(res/Pause.png)"
    }

    /**
     * "开始"按钮的单击响应方法。
     */
    function onButtonStartClicked() {
        // 游戏开始
        mGame.start()

        // 设置按钮状态
        mButtonPause.disabled = false
        mButtonPause.style.backgroundImage = "url(res/Pause.png)"

        // 设置状态栏上的文字
        mLabelDifficulty.innerHTML = IDS_DIFFICULTY[LANG] + 1
        mLabelScore.innerHTML = IDS_SCORE[LANG] + 0
    }

    /**
     * 难度增加事件的响应方法。
     * @param e 事件相关信息
     */
    function onDifficultyUp(e) {
        mLabelDifficulty.innerHTML = IDS_DIFFICULTY[LANG] + e.arg1
    }

    /**
     * 游戏结束事件的响应方法。
     * @param e 事件相关信息
     */
    function onGameOver(e) {
        if (e.arg1) {
            toast(document.getElementById("IDC_MAIN_WINDOW"), IDS_WON[LANG])
        } else {
            toast(document.getElementById("IDC_MAIN_WINDOW"), IDS_LOST[LANG])
        }

        mButtonPause.disabled = false
        mButtonPause.style.backgroundImage = "url(res/Pause_Disabled.png)"
    }

    /**
     * 按键事件的响应方法。
     * @param e 事件相关信息
     */
    function onKeyPressed(e) {
        mGame.onKeyPressed(e.keyCode)
    }

    /**
     * 窗口失去焦点事件的响应方法。
     * @param e 事件相关信息
     */
    function onLostFocus(e) {
        const status = mGame.getStatus()
        if (status == GameStatus.PLAYING) {
            onButtonPauseClicked()
        }
    }

    /**
     * 得分事件的响应方法。
     * @param e 事件相关信息
     */
    function onScore(e) {
        mLabelScore.innerHTML = IDS_SCORE[LANG] + e.arg1
    }
}
